基础知识: malloc v.s realloc
Get the knowledge flowing and circulating! :)
目录
malloc
与realloc
使用简述顺序表番外:
malloc
,realloc
使用区别直观查看~
malloc
& free
小例子xxxxxxxxxx
191void Init_SqList03(SqList *L)
2{
3 L->elem = (int*)malloc(List_InitSize * sizeof(int));
4 if (!L->elem)
5 {
6 exit(-2);
7 }
8
9 L->length = 0;
10 L->listsize = List_InitSize;
11}
12
13void DestroyList_Sq(SqList *L)
14{
15 free(L->elem); // free((*L).elem);
16 L->elem = NULL; // (*L).elem = NULL; // 置空,防止野指针
17 L->length = 0; // (*L).length = 0;
18 L->listsize = 0; // (*L).listsize = 0;
19}
realloc
小例子xxxxxxxxxx
311int ListInsert_Sq(SqList *L, int i, int e)
2{
3 if((i < 1) || i > L->length + 1)
4 return 0;
5
6 if (L->length >= L->listsize)
7 {
8 int *newbase = (int*)realloc(L->elem, (L->listsize + List_Increment) * sizeof(int));
9 if (!newbase)
10 {
11 exit(-2);
12 }
13
14 L->elem = newbase;
15 L->listsize = L->listsize + List_Increment;
16 }
17
18 int *q = L->elem + i - 1; // q指向待插入的位置
19 int *p;
20 for (p = L->elem + L->length - 1; p >= q; p--)
21 {
22 *(p + 1) = *(p);
23 }
24 // 腾出位置后,在q位置插入元素e
25 *q = e;
26 // 插入元素后,长度别忘记加啦~
27 L->length++;
28
29 return 0;
30}
31
malloc
L->elem = (int*)malloc(List_InitSize * sizeof(int));
free(L->elem); // free((*L).elem);
realloc
int *newbase = (int*)realloc(L->elem, (L->listsize + List_Increment) * sizeof(int));
L->elem = newbase;
解读:
realloc
相比malloc
就是后面的参数时,多了一个基址。即,realloc是在malloc的基址上进行重分配的
以上内容,包括这一系列的刷题内容,都是Ben的个人理解,可能会出现错误,如果发现,欢迎联系,一起更正、讨论!
Progress together!:)